// services/userService.js
import { saveUser, getUser, getToken, clearUser, isLoggedIn, refreshToken } from '@/utils/userStorage';

// 模拟API请求
const mockApiRequest = async () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        id: 1,
        name: '测试用户',
        avatar: '/static/avatar.png',
        token: 'mock_token_' + Date.now()
      });
    }, 500);
  });
};

// 获取用户信息（优先从缓存获取）
export async function getUserInfo() {
  // 检查token是否有效
  if (!isLoggedIn()) {
    clearUser();
    throw new Error('登录已过期');
  }
  
  // 先从缓存获取
  const cachedUser = getUser();
  if (cachedUser) {
    // 每次获取用户信息时刷新token有效期
    refreshToken();
    return cachedUser;
  }
  
  // 缓存中没有，调用API获取
  try {
    const userInfo = await mockApiRequest();
    saveUser(userInfo);
    return userInfo;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    clearUser();
    throw error;
  }
}

// 获取最新用户信息（强制从API获取）
export async function getFreshUserInfo() {
  try {
    const userInfo = await mockApiRequest();
    saveUser(userInfo);
    return userInfo;
  } catch (error) {
    console.error('获取最新用户信息失败:', error);
    throw error;
  }
}

// 清除用户信息
export function logout() {
  clearUser();
}

// 检查登录状态，未登录跳转
export function checkLogin() {
  if (!isLoggedIn()) {
    clearUser();
    uni.redirectTo({
      url: '/pages/login/login'
    });
    return false;
  }
  return true;
}

// 检查token有效期并刷新
export function checkAndRefreshToken() {
  if (isLoggedIn()) {
    refreshToken();
    return true;
  }
  return false;
}